package cn.lovemmd.model.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.lovemmd.model.common.PageResult;
import cn.lovemmd.model.entity.Model;
import cn.lovemmd.model.vo.ModelVO;

import java.util.List;

/**
 * 模型服务接口 - 用户展示页面后台（只读）
 * 
 * @author TLS
 * @since 2024-01-01
 */
public interface ModelService extends IService<Model> {

    /**
     * 查询模型列表（移除分页，返回所有数据）
     * 
     * @param search 搜索关键字
     * @param occupation 职业筛选
     * @return 模型列表
     */
    List<ModelVO> getModelList(String search, String occupation);

    /**
     * 根据ID查询模型详情
     * 
     * @param id 模型ID
     * @return 模型详情
     */
    ModelVO getModelById(Long id);

    /**
     * 获取模型统计信息
     * 
     * @return 统计信息
     */
    Object getModelStats();

    /**
     * 获取所有职业列表
     * 
     * @return 职业列表
     */
    List<Object> getOccupationList();

    /**
     * 根据职业查询模型列表
     * 
     * @param occupation 职业
     * @return 模型列表
     */
    List<Model> selectByOccupation(String occupation);

    /**
     * 根据分类查询模型列表
     * 
     * @param category 分类
     * @return 模型列表
     */
    List<Model> selectByCategory(String category);

    /**
     * 搜索模型
     * 
     * @param keyword 关键词
     * @return 模型列表
     */
    List<Model> searchByKeyword(String keyword);

    /**
     * 获取热门模型
     * 
     * @param limit 限制数量
     * @return 模型列表
     */
    List<Model> selectTopModels(int limit);

    /**
     * 统计模型总数
     * 
     * @return 总数
     */
    Long countTotalModels();

    /**
     * 获取职业统计
     * 
     * @return 统计列表
     */
    List<Object> getOccupationStats();

    /**
     * 获取分类统计
     * 
     * @return 统计列表
     */
    List<Object> getCategoryStats();

    /**
     * 记录下载
     * 
     * @param modelId 模型ID
     * @param username 用户名
     * @param ip IP地址
     * @param userAgent 用户代理
     * @param referer 来源页面
     */
    void recordDownload(Long modelId, String username, String ip, String userAgent, String referer);

    /**
     * 记录访问
     * 
     * @param modelId 模型ID
     * @param username 用户名
     * @param ip IP地址
     * @param userAgent 用户代理
     * @param referer 来源页面
     */
    void recordView(Long modelId, String username, String ip, String userAgent, String referer);

    /**
     * 生成下载token
     * 
     * @param modelId 模型ID
     * @param username 用户名
     * @param ip IP地址
     * @return 下载token
     */
    String generateDownloadToken(Long modelId, String username, String ip);
}
